home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
admin
/
linuxcon.000
/
linuxcon
/
linuxconf-1.6
/
dnsconf
/
fqhost.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-04-12
|
2KB
|
121 lines
#include <string.h>
#include "internal.h"
PRIVATE void FQHOST::init (const char *host)
{
const char *pt = host;
FQHOST_DECOMP *ptd = tb;
strcpy (ptd->host,"@");
strcpy (ptd->domain,host);
ptd++;
while ((pt = strchr(pt,'.'))!=NULL){
int len = (int)(pt-host);
memcpy (ptd->host,host,len);
ptd->host[len] = '\0';
strcpy (ptd->domain,pt+1);
ptd++;
pt++;
}
nbelm = (int)(ptd - tb);
}
static void qualify(
const char *fqhost,
char *full)
{
char *pt = strchr(fqhost,'.');
if (pt != NULL){
strcpy (full,fqhost);
}else{
RESOLV res;
sprintf (full,"%s.%s",fqhost,res.domain.get());
}
int len = strlen(full)-1;
if (len >= 0 && full[len] == '.') full[len] = '\0';
}
/*
A FQHOST (Fully qualified host) is used to do
different operation on a hostname, to find out if it
is a member of a domain, to get its host part (relative
to the domain etc...
*/
PUBLIC FQHOST::FQHOST(const char *host)
{
char buf[200];
qualify (host,buf);
init (buf);
}
PUBLIC FQHOST::FQHOST(const SSTRING &host)
{
char buf[200];
qualify (host.get(),buf);
init (buf);
}
PUBLIC FQHOST::FQHOST(const char *host, const char *domain)
{
char buf[200];
sprintf (buf,"%s.%s",host,domain);
init (buf);
}
/*
Return != 0 if the FQHOST is a member of this domain.
(in fact, if there is a match, it return the number of
component in the host part).
*/
PUBLIC int FQHOST::is_member(
const char *domain,
char *hostpart) // If not NULL, will contain the
// host part matching this domain
// so that hostpart.domain give
// back the fully qualified hostname
{
int ret = 0;
FQHOST_DECOMP *ptd = tb;
for (int i=0; i<nbelm; i++, ptd++){
/* #Specification: dnsconf / domain / case insensitive
When trying to match domain name, dnsconf
use case insensitive string compare.
*/
if (stricmp(ptd->domain,domain)==0){
ret = i+1;
if (hostpart != NULL) strcpy (hostpart,ptd->host);
break;
}
}
return ret;
}
/*
Get the host part that fit with this domain.
*/
PUBLIC const char *FQHOST::gethostpart(const char *domain)
{
const char *ret = NULL;
int no = is_member(domain,NULL);
if (no > 0) ret = tb[no-1].host;
return NULL;
}
/*
Format the fully qualified (with a trailing dot)
*/
PUBLIC void FQHOST::formatfull(char *full)
{
strcpy (full,tb[0].domain);
}
/*
Format the fully qualified (with a trailing dot)
*/
PUBLIC void FQHOST::formatfull(SSTRING &full)
{
char buf[200];
formatfull(buf);
full.setfrom (buf);
}